package com.ysx.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.health.pojo.CheckGroup;
import com.itheima.health.pojo.CheckItem;
import com.ysx.dao.CheckGroupDao;
import com.ysx.service.CheckGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional//开启事务的注解
@Component//将service对象 注册到容器中
public class CheckGroupServiceImpl implements CheckGroupService {

    @Autowired//注入dao层 对象 直接调用
    private CheckGroupDao checkGroupDao;

    /**
     * 新建检查组
     * @param checkGroup
     * @param ids
     * @return
     */
    @Override
    public int addGroupId(CheckGroup checkGroup, int[] ids) {
//        添加组的信息 返回一个受影响的行数
        int i = checkGroupDao.addGroupData(checkGroup);
        System.out.println("获得主键之后的完整对象:" + checkGroup);
//        如果添加组的事务操作成功!  那么才能进行添加中间表信息的操作
        if(i>0){
//            循环遍历ids数组
            for (int id : ids) {
                int i1 = checkGroupDao.addGroupAndItem(checkGroup.getId(), id);
//                判断返回值 是否为0
                if(i1==0){
                    return 0;
                }
            }
        }
//        如果执行结果都是1  那么就返回1
        return 1;
    }


    /**
     * 分页查询数据
     * @param queryPageBean
     * @return
     */
    @Override
    public PageResult<CheckGroup> findGroupPage(QueryPageBean queryPageBean) {
//        设置分页拦截规则
        PageHelper.startPage(queryPageBean.getCurrentPage(),queryPageBean.getPageSize());
//        调用dao层 根据用户输入的模糊字符进行查询筛选
        Page<CheckGroup> pages = checkGroupDao.findGroupPage(queryPageBean);
//        获取pages对象里面的totel值和分页数据list
        long total = pages.getTotal();
        List<CheckGroup> result = pages.getResult();
//        封装结果到对象PageResult
        return new PageResult<CheckGroup>(total,result);
}

    /**
     * 表单对应检查项ID回显
     * @param id
     * @return
     */
    @Override
    public List<Integer> findId(int id) {
//        调用dao层返回结果
       List<Integer> Ids= checkGroupDao.findId(id);
        System.out.println("service返回ID集合："+Ids);
       return Ids;
    }

    /**
     * 更新检查组
     * @param ids
     * @param checkGroup
     * @return
     */
    @Override
    public int updateGroup(int[] ids, CheckGroup checkGroup) {
        System.out.println("checkGroup对象：" + checkGroup);
//       根据CheckGroup对象 向数据库中添加一条记录
         int upd=  checkGroupDao.updateGroup(checkGroup);
//       将CheckGroup在中间表中对应的关系全部删除 （用id匹配
         int del=checkGroupDao.delGroup(checkGroup.getId());
//       判断ids是否为null
         int add=0;
         if(ids!=null && ids.length>0){
//             遍历所有ID 添加到数据库
            for (int id : ids) {
                add = checkGroupDao.addCenter(checkGroup.getId(),id);
                if(add==0){
                    return 0;
                }
            }
        }
        return upd;
    }

    /**
     * 查询所有的检查组
     * @return
     */
    @Override
    public List<CheckGroup> findAllGroup() {
//        调用dao层 返回checkgroup对象
        List<CheckGroup> groups=checkGroupDao.findAllGroup();
        return groups;
    }
}
